import request from "@/utils/request";

const HTTP_BASE_URL = "/biz/http";

const HttpAPI = {
	/**
	 * 获取HTTP接口分页列表
	 *
	 * @param queryParams 查询参数
	 * @returns HTTP接口分页结果
	 */
	getPage(queryParams: any) {
		return request<any, PageResult<any[]>>({
			url: `${HTTP_BASE_URL}/pages`,
			method: "get",
			params: queryParams,
		});
	},

	/**
	 * 保存HTTP接口
	 *
	 * @param data HTTP接口表单数据
	 */
	save(data: any) {
		return request({
			url: `${HTTP_BASE_URL}/save`,
			method: "post",
			data: data,
		});
	},
	
	/**
	 * 删除HTTP接口
	 *
	 * @param ids HTTP接口ID，多个以英文逗号(,)分隔
	 */
	deleteByIds(ids: string) {
		return request({
			url: `${HTTP_BASE_URL}/${ids}`,
			method: "delete",
		});
	},

	/**
	 * 下拉框
	 */
	options(queryParams: any) {
	  return request<any, any>({
	    url: `${HTTP_BASE_URL}/options`,
	    method: "get",
	    params: queryParams,
	  });
	},

	/**
	 * 测试HTTP接口
	 * 
	 * @param id HTTP接口ID
	 */
	test(id: string) {
		return request<any, HttpTestResult>({
			url: `${HTTP_BASE_URL}/test/${id}`,
			method: "post",
		});
	},
	
	getInfoById(id: string) {
	  return request<any, any>({
	    url: `${HTTP_BASE_URL}/${id}/info`,
	    method: "get",
	  });
	},
	
	/**
	 * 启动MQTT客户端
	 * @param id 客户端ID
	 */
	startClient(id: string) {
		return request<boolean>({
			url: `${HTTP_BASE_URL}/start/${id}`,
			method: "post"
		});
	},
	
	/**
	 * 停止MQTT客户端
	 * @param id 客户端ID
	 */
	stopClient(id: string) {
		return request<boolean>({
			url: `${HTTP_BASE_URL}/stop/${id}`,
			method: "post"
		});
	}

};

export default HttpAPI;

/**
 * HTTP接口查询参数
 */
export interface HttpPageQuery extends PageQuery {
	/**
	 * 关键字(接口名称/URL)
	 */
	keywords?: string;
}

/**
 * HTTP接口下拉选项查询参数
 */
export interface HttpOptionsQuery {
	/**
	 * 关键字(接口名称/URL/方法)
	 */
	keywords?: string;
}

/**
 * HTTP接口分页视图对象
 */
export interface HttpPageVO {
	/**
	 * 接口ID
	 */
	id: string;
	/**
	 * 接口名称
	 */
	name: string;
	/**
	 * 请求URL
	 */
	url: string;
	/**
	 * 请求方法
	 */
	method: string;
	/**
	 * 超时时间
	 */
	timeout: number;
	/**
	 * 认证类型
	 */
	authType: string;
	/**
	 * 创建时间
	 */
	createTime: Date;
	/**
	 * 更新时间
	 */
	updateTime: Date;
}

/**
 * HTTP接口下拉选项视图对象
 */
export interface HttpOptionVO {
	/**
	 * 接口ID
	 */
	id: string;
	/**
	 * 接口名称
	 */
	name: string;
	/**
	 * 请求URL
	 */
	url: string;
	/**
	 * 请求方法
	 */
	method: string;
}

/**
 * HTTP接口表单对象
 */
export interface HttpForm {
	/**
	 * 接口ID
	 */
	id?: string;
	/**
	 * 接口名称
	 */
	name?: string;
	/**
	 * 请求URL
	 */
	url?: string;
	/**
	 * 请求方法
	 */
	method: string;
	/**
	 * 超时时间
	 */
	timeout: number;
	/**
	 * 认证类型
	 */
	authType: string;
	/**
	 * Bearer Token
	 */
	authBearerToken: string;
	/**
	 * Basic认证用户名
	 */
	basicAuthUsername: string;
	/**
	 * Basic认证密码
	 */
	basicAuthPassword: string;
	/**
	 * 请求头 (JSON字符串)
	 */
	headers: string;
	/**
	 * 请求参数 (JSON字符串)
	 */
	params: string;
	/**
	 * 请求体类型
	 */
	bodyType: string;
	/**
	 * 请求体参数 (JSON字符串)
	 */
	bodyParams: string;
	/**
	 * 原始请求体内容
	 */
	rawContent: string;
	/**
	 * 配置信息 (JSON字符串)
	 */
	config: string;
}

/**
 * HTTP测试结果
 */
export interface HttpTestResult {
	/**
	 * 状态码
	 */
	statusCode: number;
	/**
	 * 响应体
	 */
	body: string;
	/**
	 * 响应头
	 */
	headers: Array<{
		name: string;
		value: string;
	}>;
}